function A312()
    % 对信号进行连续小波变换，将信号从时域转换到时频域，计算两种信号的差异，并通过图形展示信号之间的不同，帮助分析信号的显著特征。
    % ========== 参数设置 =========== 
    fs = 400; % 采样频率（Hz）
    window = kaiser(256, 5); % Kaiser 窗口
    overlap = 220; % 窗口重叠长度
    nfft = 512; % FFT 长度

    % ========== 加载数据 =========== 
    % 读取Excel文件并提取信号数据
    data_single = readtable('A3_data_single.xlsx');  % 读取单排钢筋信号数据
    data_double = readtable('A3_data_double.xlsx');  % 读取双排钢筋信号数据

    % 提取第150列数据（单排钢筋信号和双排钢筋信号）
    signal_single = data_single{:, 150};  % 单排钢筋信号
    signal_double = data_double{:, 150};  % 双排钢筋信号

   
    % ========== 小波变换分析 =========== 
    % 单排钢筋信号
    [C_single, L_single] = wavedec(signal_single, 5, 'db4');

    % 双排钢筋信号
    [C_double, L_double] = wavedec(signal_double, 5, 'db4');

    % 检查分解层数是否一致
    max_level_single = length(L_single) - 2;
    max_level_double = length(L_double) - 2;
    max_level = min(max_level_single, max_level_double);

    % 计算各层能量
    energy_single = zeros(1, max_level);
    energy_double = zeros(1, max_level);
    for i = 1:max_level
        coef_single = detcoef(C_single, L_single, i);
        coef_double = detcoef(C_double, L_double, i);
        energy_single(i) = sum(coef_single.^2);
        energy_double(i) = sum(coef_double.^2);
    end

    % 绘制能量分布
    figure;
    subplot(2, 1, 1);
    bar(1:max_level, energy_single);
    title('单排钢筋信号 - 小波能量分布');
    xlabel('分解层');
    ylabel('能量');

    subplot(2, 1, 2);
    bar(1:max_level, energy_double);
    title('双排钢筋信号 - 小波能量分布');
    xlabel('分解层');
    ylabel('能量');

    % 绘制小波系数对比
    figure;
    subplot(2, 1, 1);
    plot(C_single);
    title('单排钢筋信号 - 小波系数');
    xlabel('样本');
    ylabel('系数');

    subplot(2, 1, 2);
    plot(C_double);
    title('双排钢筋信号 - 小波系数');
    xlabel('样本');
    ylabel('系数');

    % ========== 连续小波变换 (CWT) ===========

    % 单排钢筋信号
    [wt_single, f_single] = cwt(signal_single, 'amor', fs);

    % 双排钢筋信号
    [wt_double, f_double] = cwt(signal_double, 'amor', fs);

    % 绘制连续小波变换时频图
    figure;
    subplot(3, 1, 1); % 将图调整为三行，差值图也绘制在同一窗口
    imagesc((1:length(signal_single))/fs, f_single, abs(wt_single));
    axis xy;
    title('单排钢筋信号 - 连续小波变换');
    xlabel('时间 (s)');
    ylabel('频率 (Hz)');
    colormap jet;

    subplot(3, 1, 2);
    imagesc((1:length(signal_double))/fs, f_double, abs(wt_double));
    axis xy;
    title('双排钢筋信号 - 连续小波变换');
    xlabel('时间 (s)');
    ylabel('频率 (Hz)');
    colormap jet;

    % 计算连续小波变换的差值
    wt_diff = abs(wt_single) - abs(wt_double);

    % 绘制差值图
    subplot(3, 1, 3);
    imagesc((1:length(signal_single))/fs, f_single, wt_diff);
    axis xy;
    title('单排与双排钢筋信号 - 连续小波变换差值');
    xlabel('时间 (s)');
    ylabel('频率 (Hz)');
    colormap jet;
    colorbar;

    % ========== 差异信号分析 =========== 
    % 归一化处理
    signal_single_norm = (signal_single - min(signal_single)) / (max(signal_single) - min(signal_single));
    signal_double_norm = (signal_double - min(signal_double)) / (max(signal_double) - min(signal_double));

    % 计算差异信号
    diff_signal = abs(signal_single_norm - signal_double_norm);

    % 绘制差异信号
    figure;
    plot((1:length(diff_signal))/fs, diff_signal, 'r');
    title('单排与双排钢筋信号 - 差异信号');
    xlabel('时间 (s)');
    ylabel('归一化幅值差');

    
end
